Bài toán Mã hóa Huffman

  • Cho tập A các ký hiệu và trọng số (tần suất) của chúng.
  • Tìm một bộ mã tiền tố với tổng độ dài mã hóa là nhỏ nhất.
Cây Huffman sinh ra từ xâu ký tự "this is an example of a huffman tree". Tổng số bit để mã hóa là 135, không kể các ký tự trống.

Dữ liệu

Input

Bảng n {\displaystyle n} chữ cái A = { a 1 , a 2 , ⋯ , a n } {\displaystyle A=\left\{a_{1},a_{2},\cdots ,a_{n}\right\}} .
Tập các trọng số (tần suất xuất hiện) tương ứng W = { w 1 , w 2 , ⋯ , w n } {\displaystyle W=\left\{w_{1},w_{2},\cdots ,w_{n}\right\}} , ví dụ: w i = w e i g h t ( a i ) , 1 ≤ i ≤ n {\displaystyle w_{i}=\mathrm {weight} \left(a_{i}\right),1\leq i\leq n} .

Output

Bộ mã C ( A , W ) = { c 1 , c 2 , ⋯ , c n } {\displaystyle C\left(A,W\right)=\left\{c_{1},c_{2},\cdots ,c_{n}\right\}} , là tập hợp các từ mã (codeword) (nhị phân), trong đó c i {\displaystyle c_{i}} là từ mã của a i , 1 ≤ i ≤ n {\displaystyle a_{i},1\leq i\leq n} .

Yêu cầu

Đặt L ( C ) = ∑ i = 1 n w i × l e n g t h ( c i ) {\displaystyle L\left(C\right)=\sum _{i=1}^{n}{w_{i}\times \mathrm {length} \left(c_{i}\right)}} là trọng số của bộ mã C {\displaystyle C} . Điều kiện là: L ( C ) ≤ L ( T ) {\displaystyle L\left(C\right)\leq L\left(T\right)} với mọi bộ mã T ( A , W ) {\displaystyle T\left(A,W\right)} .

Ví dụ

  • Trong ví dụ sau, với các tần số như trên mã 1 sẽ tốn không gian hơn mã 2.
InputKý tựabcde 
tần suất0.100.150.300.160.291,00
Mã 1Từ mã000001010011110 
Độ dài từ mã (bits)333333,00
Mã 2Từ mã000001100111
Độ dài từ mã (bits)332222,25

Tài liệu tham khảo

WikiPedia: Mã hóa Huffman http://www.cs.sfu.ca/cs/CC/365/li/squeeze http://wiki.cc/php/?title=Huffman http://www.research.att.com/projects/OEIS?Anum=A09... http://alexvn.freeservers.com/s1/huffman_template_... http://www.huffmancoding.com/david/algorithm.html http://www.huffmancoding.com/david/scientific.html http://www.informatik.uni-trier.de/~ley/db/conf/st... http://www.cs.duke.edu/csed/poop/huff/info/ http://web-cat.cs.vt.edu/AlgovizWiki/HuffmanCoding... http://semillon.wpi.edu/~aofa/AofA/msg00040.html